﻿using System;

namespace ZFramework.Runtime
{
    public interface IGameWorldManager
    {
        /// <summary>
        /// 获取当前流程。
        /// </summary>
        GameWorldBase CurrentGameWorld
        {
            get;
        }

        /// <summary>
        /// 获取当前流程持续时间。
        /// </summary>
        float CurrentGameWorldTime
        {
            get;
        }

        /// <summary>
        /// 开始流程。
        /// </summary>
        /// <typeparam name="T">要开始的流程类型。</typeparam>
        void StartGameWorld<T>() where T : GameWorldBase;

        /// <summary>
        /// 开始流程。
        /// </summary>
        /// <param name="gameWorldType">要开始的流程类型。</param>
        void StartGameWorld(Type gameWorldType);

        /// <summary>
        /// 是否存在流程。
        /// </summary>
        /// <typeparam name="T">要检查的流程类型。</typeparam>
        /// <returns>是否存在流程。</returns>
        bool HasGameWorld<T>() where T : GameWorldBase;

        /// <summary>
        /// 是否存在流程。
        /// </summary>
        /// <param name="gameWorldType">要检查的流程类型。</param>
        /// <returns>是否存在流程。</returns>
        bool HasGameWorld(Type gameWorldType);

        /// <summary>
        /// 获取流程。
        /// </summary>
        /// <typeparam name="T">要获取的流程类型。</typeparam>
        /// <returns>要获取的流程。</returns>
        GameWorldBase GetGameWorld<T>() where T : GameWorldBase;

        /// <summary>
        /// 获取流程。
        /// </summary>
        /// <param name="gameWorldType">要获取的流程类型。</param>
        /// <returns>要获取的流程。</returns>
        GameWorldBase GetGameWorld(Type gameWorldType);
    }
}